package Thread;

import java.util.concurrent.CountDownLatch;

public class Demo32 {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(10);
        for(int i = 0; i < 10; i++){
            int id =i;
            /*  将i给id id不是一个变量了 一轮循环只有一个字 不会改变
            * i 变量的作用域与捕获问题：在 Lambda 表达式里运用了外部 for 循环的变量 i，
            * 但 Lambda 表达式捕获的是变量的值，而非变量本身。由于 for 循环执行速度很快，
            * 等线程真正开始执行时，i 的值已经变成了 10
            * 这就会造成所有线程打印的结果都相同或者出现编译错误。
            * */
            Thread t = new Thread(()->{
                System.out.println("thread"+id);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                //通知当前的任务执行完毕了
                countDownLatch.countDown();
            });
            t.start();
        }
        countDownLatch.await();
        System.out.println("所有的任务都完成了");
    }
}
